/**********************************************************
 *Filename: send_receive.h
 *Author:   星云鹏
 *Date:     2008-05-15
 *
 *消息、文件（夹）的发送和接收
 *********************************************************/

#ifndef SEND_RECV_H
#define SEND_RECV_H

#include "coms.h"
#include <pwd.h>
#include <sys/utsname.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>

extern void *sendMsg(command *com);

/**
 * 聊天
 * @return
 */
extern int saySth();

/**
 * 文件发送
 * 选择要传输的文件
 * @return
 */
extern int selectFiles();

/**
 * 文件或文件夹发送
 * @param option
 * @return
 */
extern void *sendData(void *option);

/**
 * 发送文件夹
 * @param fSock
 * @param fullpath
 * @param fileSize
 * @param fileType
 * @return
 */
extern int sendDir(int fSock, const char *fullpath, int fileSize, int fileType);

/**
 * 遍历要发送的文件夹，利用上面的回掉函数发送
 * FILENAME指定了fullpath的容量
 * @param fSock
 * @param fullpath
 * @param snd
 * @return
 */
extern int traverseDir(int fSock, char *fullpath, Mysnd snd);

/**
 * 列举待发送文件
 * @param list
 * @param gs
 * @param size
 * @return
 */
extern int listSFiles(gsNode **list, gsNode *gs, int size);

/**
 * 取消文件传输
 * @return
 */
extern int ceaseSend();

/**
 * 文件接收
 * 选择要接收的文件
 * @return
 */
extern int recvFiles();

/**
 * 文件接收线程
 * @param option
 * @return
 */
extern void *getData(void *option);

/**
 * 接收文件
 * @param option
 * @param gList
 * @return
 */
extern int getFile(void *option, gsNode *gList);

/**
 * 接收文件夹时分析，头部
 * @param pfn
 * @param recvs
 * @return
 */
extern int parseHeader(filenode *pfn, char *recvs);

/**
 * 接收文件夹
 *
 * @param option
 * @param gList
 * @return
 */
extern int getDir(void *option, gsNode *gList);

/**
 * 列举待接收文件
 * @param list
 * @param gs
 * @param size
 * @return
 */
extern int listGFiles(gsNode **list, gsNode *gs, int size);

/**
 * 登录
 * @return
 */
extern int login();

/**
 * 退出
 * @return
 */
extern int logout();


#endif
